<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>


    <script>
        //强制性的改变this指向
        // let name = "haha"

        // function fn() {
        //     console.log(this)
        //     //console.log(arguments)
        //     //console.log(Array.prototype.slice.call(arguments)) //伪数组=>真数组
        //     //console.log([].slice.call(arguments)) //伪数组=>真数组
        // }

        // let o = {
        //         name: "xixi"
        //     }
        //     // fn(5)
        // fn.call(o, 5, true, "hello") //第一个参数是你要改变this，指向的那个对象，第二个参数开始就是实参

        // // let arr = [1,2,3];
        // // arr.slice()
        // // Array.prototype.slice.call(伪数组)



        // function fn(x, y) {
        //     console.log(this)
        //     console.log(arguments)
        //     console.log(Array.prototype.slice.apply(arguments))
        // }
        // let o = {
        //     name: "xixi"
        // }
        // fn.apply(o, [8, 'hello'])


        //数据检测   typeof   instanceof   Array.isArray()  

        // console.log(Object.prototype.toString.call("hello"))
        // console.log(Object.prototype.toString.call(10))
        // console.log(Object.prototype.toString.call(true))
        // console.log(Object.prototype.toString.call(undefined))
        // console.log(Object.prototype.toString.call(null))
        // console.log(Object.prototype.toString.call(function fn() {}))
        // console.log(Object.prototype.toString.call({
        //     name: "xixi"
        // }))
        // console.log(Object.prototype.toString.call([1, 2, 3]))

        // let o = {};
        // console.log(o)


        // function fn() {
        //     console.log(this)
        //     console.log(arguments)
        // }

        // let o = {
        //     name: "xixi"
        // }

        // // fn.call()
        // // fn.apply()
        // let x = fn.bind(o, 'hello', 10)
        // x()

        // fn.bind(o)()



        // var num = 1;
        // var myObject = {
        //     num: 2,
        //     add: function() {
        //         this.num = 3;
        //         (function() {
        //             console.log(this) //window
        //             console.log(this.num); //1
        //             this.num = 4;
        //         })();
        //         console.log(this.num); //3
        //     },
        //     sub: function() {
        //         console.log(this) //window
        //         console.log(this.num)
        //     }
        // }

        // myObject.add();
        // console.log(myObject.num); //3
        // console.log(num); //4
        // var sub = myObject.sub; //4
        // sub();
    </script>
</body>

</html>